using System;
using System.Collections.Generic;
using System.Text;
using NEXServicio;
using System.Data;

namespace NEXEntidad
{
    #region Tema
    public class Tema : NEXEntidad.NEXEntidadElemento
    {
        #region Constructores

        public Tema(int id)
            : base(id)
        {
            this.Id = id;
        }
        public Tema(int id, string descripcion)
            : base()
        {
            this.Id = id;
            this.Descripcion = descripcion;
        }
        public Tema()
            : base()
        {
        }
        #endregion

        #region Campos/Propiedades

        private bool activo;
        public bool Activo
        {
            get { return activo; }
            set { activo = value; }
        }

        #endregion

        #region Metodos de carga

        protected override void Obtener()
        {
            using (DataSet ds = ServicioTema.Obtener(this.Id, this.GUId))
            {
                DataTable dtTema = ds.Tables[ServicioTema.DataTableName];
                if (dtTema.Rows.Count > 0)
                {
                    DataRow drTema = dtTema.Rows[0];
                    Tema.Cargar(this, drTema);
                }
                else
                {
                    throw new ObjetoInexistenteException("Tema");
                }
            }
        }

        private static void Cargar(Tema tema, DataRow drTema)
        {

            tema.Id = Convert.ToInt32(drTema["IdTema"].ToString(), System.Globalization.CultureInfo.CurrentCulture);
            tema.GUId = new Guid(drTema["GuidTema"].ToString());
            tema.Descripcion = drTema["Descripcion"].ToString();
            tema.ObjetoCargado();
        }

        internal static TemaCollection CrearListaCargada(DataRowCollection drcTemas)
        {
            TemaCollection temas = new TemaCollection();
            foreach (DataRow drTema in drcTemas)
            {
                temas.Add(Tema.CrearCargado(drTema));
            }
            return temas;
        }

        private static Tema CrearCargado(DataRow drTema)
        {
            Tema tema = new Tema(Convert.ToInt32(drTema["IdTema"].ToString()));
            Tema.Cargar(tema, drTema);
            return tema;
        }
        #endregion

        #region Metodos Publicos

        public static TemaCollection Listar()
        {
            return Tema.CrearListaCargada(ServicioTema.Listar(true).Tables[ServicioTema.DataTableName].Rows);
        }

        public static TemaCollection ListarPorLibro(Int32 idLibro)
        {
            return Tema.CrearListaCargada(ServicioTema.ListarPorLibro(idLibro).Tables[ServicioTema.DataTableName].Rows);
        }

        public static Tema Nuevo()
        {
            return new Tema();
        }

        //public static Tema Nuevo(string descripcion)
        //{
        //    return new Tema(Guid.NewGuid(), descripcion, "");
        //}

        #endregion
    }


    #endregion

    #region TemaCollection

    [Serializable]
    public class TemaCollection : NEXCollection<Tema>
    {
    }

    #endregion
}
